//
//  HomeController.swift
//  MySinaWeiBo
//
//  Created by zhangfuwei on 15/7/29.
//  Copyright © 2015年 zhangfuwei. All rights reserved.
//

import UIKit

class HomeController: BaseController {

    ///  定义微博模型数组接收 从网络加载的 微博数据
    private  var statusArray: [Status]? {
        didSet {
            tableView.reloadData()
        }
        
    }
    //  MARK:重写构造函数
    override func viewDidLoad() {
        super.viewDidLoad()
       
        if UserAccount.loadUserAcount() == nil {
            visitorV?.setViewInfo(true, imageName: "visitordiscover_feed_image_smallicon", title: "关注一些人，回这里看看有什么惊喜")
            return
        }
        
        prepareTableView()
        loadStatus()

    }
    
    
    //  MARK:准备 tableView
    func prepareTableView() {
        //  注册 cell
        tableView.registerClass(StatusNormalCell.self, forCellReuseIdentifier:statusCellReuseIdentifier.StatusNormalCell.rawValue)
        
        tableView.registerClass(StatusForwardCell.self , forCellReuseIdentifier: statusCellReuseIdentifier.StatusForwardCell.rawValue)
        
        tableView.rowHeight = 500
        
        //  将 tableView 的刷新控件实例化,即可在下拉显示
        refreshControl = StatusRefreshControl()
        //  添加事件
        refreshControl?.addTarget(self, action: "loadStatus", forControlEvents: UIControlEvents.ValueChanged)
    }
    
    //  定义上拉刷新标记
    private var pullupFlag = false
    
    //  MARK:  加载微博数据(刷新)
    ///  通过微博模型封装在内部的方法 加载微博数据
    func loadStatus() {
        
        // 加载数据就开始动画
        refreshControl?.beginRefreshing()
        
        // 获取since_id:Int? , max_id:Int?
        var  since_id = statusArray?.first?.id ?? 0
        var  max_id = 0
        
        // 判断上拉刷新标记是否有
        if pullupFlag {
            
            since_id = 0
            max_id = statusArray?.last!.id ?? 0
        }
        // 利用微博模型内部的加载数据方法---获取微博数据
        Status.loadStatus(since_id, max_id: max_id) { (datalist, error) -> () in
            
            self.refreshControl?.endRefreshing()
            
            //  如果有错误,则返回
            if error != nil {
                print(error)
                return
            }

            if since_id > 0 {
                
                let count = datalist?.count ?? 0
                //  TODO:调用下拉刷新提示
                self.showPulldownTip(count)
                
            }
        
            //  如果符合下拉刷新条件
            
            if since_id > 0 {
                
                self.statusArray = datalist! + self.statusArray!
            }else if max_id > 0 {
                self.statusArray = self.statusArray! + datalist!
                self.pullupFlag = false
            }else {
                self.statusArray = datalist!
            }
            
 
        }
        
    }
    
    //  MARK: 下拉刷新提示动画
    private func showPulldownTip(count:Int) {
        
        if self.tipLbl.layer.animationForKey("position") != nil {
            print("动画正在执行中...")
            return
        }
        tipLbl.text = count != 0 ? "刷新到\(count)条微博" : "暂时没有微博刷新"
        
        let  rect = tipLbl.frame
        
        UIView.animateWithDuration(2.0, animations: { () -> Void in
            // 自动反转动画
            UIView.setAnimationRepeatAutoreverses(true)
            
            self.tipLbl.frame = CGRectOffset(rect, 0, rect.height * 3)
            
            }) { (_) -> Void in
                
                self.tipLbl.frame = rect
        }
    }

    
    //  MARK:  数据源方法---重写返回一组 cell 的个数
    override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return statusArray?.count ?? 0
    }
    
    //  重写返回 cell 的内容
    override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
        
        let currentStatus = statusArray![indexPath.row]
        
        let cell = tableView.dequeueReusableCellWithIdentifier(statusCellReuseIdentifier.reuseID(currentStatus), forIndexPath: indexPath) as! statusCell
        
        
        // MARK: 当即将显示最后一个 cell 时,就开始进行上拉加载数据
        if indexPath.row == statusArray!.count - 1 {
            pullupFlag = true
            loadStatus()
        }
        
        
        cell.status = currentStatus
        
        return cell
    }
 
    //  MARK:   返回高度
    override func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat {
        

        let currentVCstatus = statusArray![indexPath.row]
        
        if currentVCstatus.rowHeight != nil {
            
            return currentVCstatus.rowHeight!
        }
        ///  根据返回的重用标识,来从缓存池中取 cell
        let cell = tableView.dequeueReusableCellWithIdentifier(statusCellReuseIdentifier.reuseID(currentVCstatus)) as! statusCell

        
        currentVCstatus.rowHeight = cell.rowHeight(currentVCstatus)

        return currentVCstatus.rowHeight!
        
    }
    
    
    // MARK: 懒加载控件 
    
     private lazy var tipLbl: UILabel = {
        
        let h = CGFloat(44)
        let lbl = UILabel(frame: CGRect(x: 0, y: -2 * h, width:self.view.bounds.size.width, height: h))
        lbl.backgroundColor = UIColor.orangeColor()
        lbl.textColor = UIColor.whiteColor()
        lbl.textAlignment = NSTextAlignment.Center
        
        self.navigationController?.navigationBar.insertSubview(lbl, atIndex: 0)
        return lbl
    }()
   
}
